package net.yla.smartbus.core.base;

import net.yla.smartbus.core.api.ApiResult;
import net.yla.smartbus.core.api.RequestCode;
import net.yla.smartbus.core.util.StringEx;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Arrays;

/**
 * @author wangpan
 * @date 2018/8/1 10:42
 */
@RestController
@RequestMapping(value = "/upload")
public class UploadController extends BaseController {

    /**
     * 支持图片的类型
     **/
    private String[] types = {".jpg", ".bmp", ".jpeg", ".png", ".webp", ".PNG", ".JPG", ".JPEG"};

    /**
     * 支持的excel上传类型
     */
    private String excelType = ".xls";

    /**
     * 支付证书的类型
     **/
//  private String [] certTypes={".p12"};

    @Value("${save.path}")
    private String savePath;

    @Value("${visit.path}")
    private String visitPath;
    @Value("${imgDate.path}")
    private String dataPath;
    //  @Value("${certificate.path}")
//  private  String certificatePath;
    @Value("${file.upload.max.size}")
    private long fileUploadMaxSize;

    /**
     * 上传图片
     */
    @PostMapping(value = "/image")
    public ApiResult upload(@RequestParam(value = "file", required = false) MultipartFile file) {
        //文件名为
        String fileName = "";

        if (file != null && !file.isEmpty()) {
            fileName = file.getOriginalFilename();
            logger.info("current file size is" + file.getSize() + ";the max size is" + fileUploadMaxSize);
            //图片大小限制在2M
            if (file.getSize() > fileUploadMaxSize) {
                return error(RequestCode.forbid_error, "请上传小于2M的图片");
            }
            String type = fileName.substring(fileName.lastIndexOf("."));
            if (Arrays.asList(types).contains(type)) {
                BufferedOutputStream out = null;
                File fileSourcePath = new File(savePath);
                if (!fileSourcePath.exists()) {
                    //目录不存在的情况下创建目录
                    fileSourcePath.mkdirs();
                }
                //fileName = ((int)(Math.random()*9000)+1000)+"_"+file.getOriginalFilename();
                //源文件中文乱码导致图片链接指向不到
                fileName = StringEx.getRandomStringByDate(22) + type;
                File fileSavePath = new File(fileSourcePath, fileName);
                logger.info("上传的文件名为：" + fileName);
                try {
                    out = new BufferedOutputStream(new FileOutputStream(fileSavePath));
                    out.write(file.getBytes());
                    out.flush();
                } catch (Exception e) {
                    e.printStackTrace();
                    return error(RequestCode.forbid_error, "上传图片异常");
                }
                //将文件设置为可读
                fileSavePath.setReadable(true, false);
                // 移除域名前缀
                logger.info("图片保存成功，访问路径：" + visitPath + "/" + fileName);
                //return success(dataPath+"/"+fileName);
                return success(visitPath + "/" + fileName);
            }
            return error(RequestCode.forbid_error, "图片格式不匹配");
        }
        return error(RequestCode.forbid_error, "请输入文件");
    }
//
//@PostMapping("/excelUpload")
//  public ApiResult excelUpload(@RequestParam(value = "file",required = false) MultipartFile file)  {
//  String fileName = "";
//
//  if (file!=null && !file.isEmpty()) {
//    fileName = file.getOriginalFilename();
//    logger.info("current file size is"+file.getSize()+";the max size is"+fileUploadMaxSize);
////    //图片大小限制在2M
////    if(file.getSize() > fileUploadMaxSize){
////      return error(RequestCode.forbid_error, "请上传小于2M的图片");
////    }//if
//    //获取上传文件格式
//    String type = fileName.substring(fileName.lastIndexOf("."));
//    //判断是否符合上传格式
//    if (Arrays.asList(excelType).contains(type)){
//      //获取字节流对象
//      InputStream inputStream=null;
//      try {
//       inputStream=file.getInputStream();
//
//
//      } catch (IOException e) {
//        e.printStackTrace();
//      }
//      //BufferedOutputStream out = null;
////      File fileSourcePath = new File(savePath);
////
////      if (!fileSourcePath.exists()) {
////        //目录不存在的情况下创建目录
////        fileSourcePath.mkdirs();
////      }////if
////
////      //fileName = ((int)(Math.random()*9000)+1000)+"_"+file.getOriginalFilename();
////      //源文件中文乱码导致图片链接指向不到
////      fileName = StringEx.getRandomStringByDate(22)+type;
////      File fileSavePath = new File(fileSourcePath, fileName);
////      logger.info("上传的文件名为：" + fileName);
////      try {
////        out = new BufferedOutputStream(new FileOutputStream(fileSavePath));
////        out.write(file.getBytes());
////        out.flush();
////      }catch (Exception e){
////        e.printStackTrace();
////        return error(RequestCode.forbid_error, "上传图片异常");
////      }
////      //将文件设置为可读
////      fileSavePath.setReadable(true,false);
////      // 移除域名前缀
////      logger.info("图片保存成功，访问路径："+visitPath+"/"+fileName);
////      return success(visitPath+"/"+fileName);
////         logger.info("图片保存成功，访问路径："+"/"+fileName);
////         return success("/"+fileName);
//    }//if
//
//
//    return error(RequestCode.forbid_error, "图片格式不匹配");
//  }//if1
//  return error(RequestCode.forbid_error, "请输入文件");
//  }
    /**
     * 支付证书上传，返回本地上传路径
     * @param file
     * @return
     */
//  @PostMapping(value = "/certificate")
//  @ApiOperation(value = "上传证书")
//  public ApiResult uploadCertificate(@RequestParam(value = "file",required = false) MultipartFile file)  {
//    String fileName = "";
//    if (file!=null && !file.isEmpty()) {
//      fileName = file.getOriginalFilename();
//      String type = fileName.substring(fileName.lastIndexOf("."));
//      if (Arrays.asList(certTypes).contains(type)){
//        BufferedOutputStream out = null;
//        File fileSourcePath = new File(certificatePath);
//        if (!fileSourcePath.exists()) {
//          //目录不存在的情况下创建目录
//          fileSourcePath.mkdirs();
//        }
//        //源文件中文乱码导致图片链接指向不到
//        //fileName = ((int)(Math.random()*9000)+1000)+"_"+DateUtils.currentStringDate();
//
//        fileName = StringEx.getRandomStringByDate(22)+type;
//        File fileSavePath = new File(fileSourcePath, fileName);
//        logger.info("上传的文件名为：" + fileName);
//        try {
//          out = new BufferedOutputStream(new FileOutputStream(fileSavePath));
//          out.write(file.getBytes());
//          out.flush();
//        }catch (Exception e){
//          e.printStackTrace();
//          return error(RequestCode.forbid_error, "上传证书异常");
//        }
//        //将文件设置为可读
//        fileSavePath.setReadable(true,false);
//        logger.info("证书保存成功，本地访问路径："+certificatePath+"/"+fileName);
//        return success(certificatePath+"/"+fileName);
//      }
//      return error(RequestCode.forbid_error, "证书格式不匹配");
//    }
//    return error(RequestCode.forbid_error, "请输入文件");
//  }


    /**
     * 上传文件
     * @param file
     * @return
     * @throws Exception
     */
//  @PostMapping(value = "/image4doc")
//  @ApiOperation(value = "上传图片")
//  public void upload4Doc(@RequestParam(value = "file",required = false) MultipartFile file, HttpServletRequest request, HttpServletResponse response)  {
//    String fileName = "";
//    Map map = new HashMap(3);
//    //errorCode 0代表成功，1代表失败，失败的情况有message
//    String errorCode = "1";
//    String picUrl = null;
//    String errMessage = null;
//    if (file!=null && !file.isEmpty()) {
//      fileName = file.getOriginalFilename();
//      logger.info("image4doc==current file size is"+file.getSize());
//      String type = fileName.substring(fileName.lastIndexOf("."));
//      if (Arrays.asList(types).contains(type) || ".gif".equals(type)){
//        BufferedOutputStream out = null;
//        File fileSourcePath = new File(savePath);
//        if (!fileSourcePath.exists()) {
//          //目录不存在的情况下创建目录
//          fileSourcePath.mkdirs();
//        }
//        //源文件中文乱码导致图片链接指向不到
//        fileName = StringEx.getRandomStringByDate(22)+type;
//        File fileSavePath = new File(fileSourcePath, fileName);
//        logger.info("上传的文件名为：" + fileName);
//        try {
//          out = new BufferedOutputStream(new FileOutputStream(fileSavePath));
//          out.write(file.getBytes());
//          out.flush();
//          errorCode = "0";
//          errMessage = "上传成功";
//        }catch (Exception e){
//          e.printStackTrace();
//          logger.error("上传图片异常");
//          errMessage="上传图片异常";
//        }
//        //将文件设置为可读
//        fileSavePath.setReadable(true,false);
//        logger.info("图片保存成功，访问路径："+visitPath+"/"+fileName);
//        picUrl = visitPath+"/"+fileName;
//      }else{
//        errMessage="图片格式不匹配，支持.jpg,bmp,jpeg,png,webp,gif";
//      }
//    }else{
//      errMessage = "请选择图片";
//    }
//    map.put("error",errorCode);
//    map.put("url",picUrl);
//    map.put("message",errMessage);
//    try {
//      String url = request.getParameter("redirect");
//      logger.info("=image4doc===url="+url+"?s="+JSON.toJSONString(map));
//      response.sendRedirect(url+"?s="+JSON.toJSONString(map));
//    }catch (Exception e){
//      e.printStackTrace();
//    }
//  }

    /**
     * 上传文件
     * @param file
     * @return
     * @throws Exception
     */
//  @PostMapping(value = "/upload4AdImage")
//  @ApiOperation(value = "上传图片")
//  public ApiResult upload4AdImage(@RequestParam(value = "file",required = false) MultipartFile file)  {
//
//    String fileName = "";
//    if (file!=null && !file.isEmpty()) {
//      try {
//        BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
//        int width = bufferedImage.getWidth();
//        int height = bufferedImage.getHeight();
//
//        double wdh = new BigDecimal(width).divide(new BigDecimal(height),2,BigDecimal.ROUND_HALF_UP).doubleValue();
//        if (wdh<3.8||wdh>4.3){
//          return error(RequestCode.forbid_error,"请上传图片的宽高比例在4:1左右");
//        }
//      } catch (IOException e) {
//        e.printStackTrace();
//      }
//
//      fileName = file.getOriginalFilename();
//      logger.info("current file size is"+file.getSize()+";the max size is"+1048576);
//      //图片大小限制在1M
//      if(file.getSize() > 1048576l){
//        return error(RequestCode.forbid_error, "请上传小于1M的图片");
//      }
//      String type = fileName.substring(fileName.lastIndexOf("."));
//      if (Arrays.asList(types).contains(type)){
//        BufferedOutputStream out = null;
//        File fileSourcePath = new File(savePath);
//        if (!fileSourcePath.exists()) {
//          //目录不存在的情况下创建目录
//          fileSourcePath.mkdirs();
//        }
//        //fileName = ((int)(Math.random()*9000)+1000)+"_"+file.getOriginalFilename();
//        //源文件中文乱码导致图片链接指向不到
//        fileName = StringEx.getRandomStringByDate(22)+type;
//        File fileSavePath = new File(fileSourcePath, fileName);
//        logger.info("上传的文件名为：" + fileName);
//        try {
//          out = new BufferedOutputStream(new FileOutputStream(fileSavePath));
//          out.write(file.getBytes());
//          out.flush();
//        }catch (Exception e){
//          e.printStackTrace();
//          return error(RequestCode.forbid_error, "上传图片异常");
//        }
//        //将文件设置为可读
//        fileSavePath.setReadable(true,false);
//        logger.info("图片保存成功，访问路径："+visitPath+"/"+fileName);
//        return success(visitPath+"/"+fileName);
//      }
//      return error(RequestCode.forbid_error, "图片格式不匹配");
//    }
//    return error(RequestCode.forbid_error, "请输入文件");
//  }


}
